package com.itheima.reggie.controller;

import  com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import  com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import  com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import  com.itheima.reggie.common.R;
import  com.itheima.reggie.dto.DishDto;
import  com.itheima.reggie.entity.Category;
import  com.itheima.reggie.entity.Dish;
import  com.itheima.reggie.service.CategoryService;
import  com.itheima.reggie.service.DishService;
import  org.springframework.beans.BeanUtils;
import  org.springframework.beans.factory.annotation.Autowired;
import  org.springframework.web.bind.annotation.*;

import  java.util.List;
import  java.util.stream.Collectors;

/**
* 菜品管理
*/
@RestController
@RequestMapping("/dish")
public  class  DishController {
@Autowired
private  DishService dishService;
@Autowired
private  CategoryService categoryService;

@GetMapping("/list")
public  R<List<Dish>> list(Dish dish){
LambdaQueryWrapper<Dish> queryWrapper = new  LambdaQueryWrapper<>();
queryWrapper.eq(dish.getCategoryId() != null ,Dish::getCategoryId,
dish.getCategoryId());
//添加条件，查询状态为1（起售状态）的菜品
queryWrapper.eq(Dish::getStatus,1);
//添加排序条件
queryWrapper.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime);
List<Dish> list = dishService.list(queryWrapper);
return  R.success(list);
}

@DeleteMapping
public  R<String> delete(@RequestParam List<Long> ids){
dishService.delByIdWithFlavor(ids);
return  R.success("删除成功");
}

@PostMapping("/status/{statusNum}")
public  R<String> updateStatus(@PathVariable Integer statusNum,
@RequestParam List<Long> ids){
LambdaUpdateWrapper<Dish> updateWrapper = new  LambdaUpdateWrapper<>();
updateWrapper.in(Dish::getId,ids);
updateWrapper.set(Dish::getStatus,statusNum);
dishService.update(updateWrapper);
return  R.success(statusNum==0?"停售成功":"起售成功");
}
@PutMapping
public  R<String> update(@RequestBody DishDto dishDto){
dishService.updateWithFlavor(dishDto);
return  R.success("修改菜品成功");
}
/**
* 根据菜品id查询菜品信息和对应的口味信息
*/
@GetMapping("/{id}")
public  R<DishDto> get(@PathVariable Long id){
DishDto dishDto = dishService.getByIdWithFlavor(id);
return  R.success(dishDto);
}
/**
* 菜品信息分页查询
*/
@GetMapping("/page")
public  R<Page> page(int  page, int  pageSize, String name){
//分页构造器对象
Page<Dish> pageInfo = new  Page<>(page,pageSize);
Page<DishDto> dishDtoPage = new  Page<>();
//条件构造器
LambdaQueryWrapper<Dish> queryWrapper = new  LambdaQueryWrapper<>();
//添加过滤条件
queryWrapper.like(name != null,Dish::getName,name);
//添加排序条件
queryWrapper.orderByDesc(Dish::getUpdateTime);
//执行分页查询
dishService.page(pageInfo,queryWrapper);
//对象拷贝
BeanUtils.copyProperties(pageInfo,dishDtoPage,"records");
List<Dish> records = pageInfo.getRecords();
List<DishDto> list = records.stream().map((item) -> {
DishDto dishDto = new  DishDto();
BeanUtils.copyProperties(item,dishDto);
Long categoryId = item.getCategoryId();//分类id
//根据id查询分类对象
Category category = categoryService.getById(categoryId);
if (category != null){
String categoryName = category.getName();
dishDto.setCategoryName(categoryName);
}
return  dishDto;
}).collect(Collectors.toList());
dishDtoPage.setRecords(list);
return  R.success(dishDtoPage);
}
/**
* 新增菜品
*/
@PostMapping
public  R<String> save(@RequestBody DishDto dishDto){
dishService.saveWithFlavor(dishDto);
return  R.success("新增菜品成功");
}
}
